La instrucción SQL INSERT INTO SELECT copia datos de una tabla y los inserta en otra tabla.
El operador INSERT INTO SELECT requiere que los tipos de datos en las tablas de origen y de destino coincidan.
Copia todas las columnas de una tabla a otra:
INSERT INTO table2
SELECT *
FROM table1
WHERE condition
Copia solo algunas columnas de una tabla a otra:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
En este tutorial usaremos la famosa base de datos de ejemplo "Northwind".
A continuación se muestra un ejemplo de la tabla "Customers" ("Clientes"):
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Y la muestra de la tabla "Suppliers" ("Proveedores"):
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country | Phone |
---|---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | (171) 555-2222 |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | (100) 555-4822 |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | (313) 555-5735 |
4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai Musashino-shi | Tokyo | 100 | Japan | (03) 3555-5011 |
5 | Cooperativa de Quesos 'Las Cabras' | Antonio del Valle Saavedra | Calle del Rosal 4 | Oviedo | 33007 | Spain | (98) 598 76 54 |
La siguiente consulta SQL copia "Suppliers" ("Proveedores") en "Customers" ("Clientes") (las columnas que no se completan con datos contendrán NULL):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
Otra versión de la consulta SQL copia datos de la tabla "Proveedores" a "Clientes" (llena todas las columnas):
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country
FROM Suppliers
La siguiente instrucción SQL copia solo los proveedores alemanes en la tabla Clientes:
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
WHERE Country = 'Germany'